package com.mastercard.assets.web.struts.actions;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.DevolverPaquetesForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class DevolverPaquetes
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		DevolverPaquetesForm f = ( DevolverPaquetesForm ) form ;
		
//		// en caso de que venga en null o cveCuenta en 0
//		if( f == null || f.getCveCuenta( ) < 1 )
//		{
//			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/GenerarCampanaOrigenNoAceptado.do" ) ;
//			
//			return mapping.findForward( "success" ) ;
//		}
//		
//		// toma el packageManager
//		ManejadorPaquetesAsignados packageManager = f.getPackageManager( ) ;
//		
//		// toma los paqeutesAutorizados
//		List< PaqueteAutorizado > paquetesAutorizados = packageManager.getPaqueteAutorizadoLista( ) ;
//		
//		// Lista de paquetes
//		List< TblCuentaPaquete > paquetesParaCampana = new ArrayList< TblCuentaPaquete >( ) ;
//		
//		// toma las cantidades dedicadas a la campana
//		System.out.println( "GenerarCampanaPreparacion: TraeAsignarInt" ) ;
//		int[ ] paquetesAsignadosACampana = f.getAsignarInt( ) ;
//		
//		System.out.println( "GenerarCampanaPreparacion: paquetesAsignadosACampana/" + paquetesAsignadosACampana.length ) ;
//		
//		for( int i : paquetesAsignadosACampana )
//			System.out.println( "GenerarCampanaPreparacion: paquetesAsignadosACampana[index]/" + i ) ;
//		
//		// indice para paquetesAsignadosACampana
//		int index = 0 ;
//		
//		// toma el orden de los PaquetesAutorizados
//		String[ ] paqueteAutorizadoOrder = f.getPaqueteAutorizadoIdOrder( ) ;
//		
//		System.out.println( "GenerarCampanaPreparacion: paqueteAutorizadoOrder/" + paqueteAutorizadoOrder.length ) ;
//		
//		// recorre los valores del orden
//		for( String order : paqueteAutorizadoOrder )
//		{
//			System.out.println( "GenerarCampanaPreparacion: index/" + index + ": valor/" + paquetesAsignadosACampana[ index ] ) ;
//			
//			// en caso de que sea menor a 1
//			if( paquetesAsignadosACampana[ index ] < 1 )
//			{
//				index++ ;
//				// sigue al siguientes
//				continue ;
//			}
//			
//			PaqueteAutorizado paqAut = null ;
//			
//			System.out.println( "GenerarCampanaPreparacion: order/" + order ) ;
//			
//			// en caso de null o vacio
//			if( order == null || order.trim( ).length( ) == 0 )
//			{
//				index++ ;
//				// continua al siguiente
//				continue ;
//			}
//			
//			// toma el orden y lo separa en tokens
//			String[ ] tokens = order.split( "-" ) ;
//			
//			int cveAsset = 0 ;
//			int habitacion = 0 ;
//			
//			try
//			{
//				cveAsset = Integer.parseInt( tokens[ 0 ] ) ;
//				habitacion = Integer.parseInt( tokens[ 1 ] ) ;
//			}catch( Exception e )
//			{
//				index++ ;
//				continue ;
//			}
//			
//			System.out.println( "GenerarCampanaPreparacion: cveAsset/" + cveAsset + ": habitacion/" + habitacion + ": size/" + paquetesAutorizados.size( ) ) ;
//			
//			// recorre la lista de paquetesAutorizados para encontrar el adecuado
//			for( PaqueteAutorizado paq : paquetesAutorizados )
//			{
//				// en caso d que coincida evento y habitacion
//				if( paq.getEvento( ).getCveAsset( ) == cveAsset && paq.getTipoHabitacion( ) == habitacion )
//				{
//					paqAut = paq ;
//					
//					// quiebra el ciclo
//					break ;
//				}
//			}
//			
//			System.out.println( "GenerarCampanaPreparacion: paqAut/" + paqAut ) ;
//			
//			// en caso de que no haya paqAut
//			if( paqAut == null )
//			{
//				System.out.println( 1 ) ;
//				
//				// es error y por tanto manda a otra pagina.
//				user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.generarcampana.ErrorSelectingPackagesNoPackageAutorized" , ( ( habitacion == 1 ) ? "Sencilla" : "Doble" ) , cveAsset ) ) ;
//				
//				return mapping.findForward( "success" ) ;
//			}
//			
//			System.out.println( "GenerarCampanaPreparacion: paqAut/" + paqAut.getCantidadAsignada( ) ) ;
//			
//			// en caso de que si haya paqAut
//			// toma los paquetes
//			List< TblCuentaPaquete > paquetesDeAsset = paqAut.getPaquetesAsignadosACuenta( ) ;
//			
//			// los ordena por tipo de facturacion y fondeado
//			TblCuentaPaquete[ ] paquetesDeAssetArr = paquetesDeAsset.toArray( new TblCuentaPaquete[ 0 ] ) ;
//			Arrays.sort( paquetesDeAssetArr , new Comparator< TblCuentaPaquete >( )
//					{
//						public int compare( TblCuentaPaquete p1 , TblCuentaPaquete p2 )
//						{
//							// toma el paquete
//							TblPaquete paq1 = p1.getTblPaquete( ) ;
//							TblPaquete paq2 = p2.getTblPaquete( ) ;
//							
//							// toma los datos fondeado y facturado
//							int fon1 = paq1.getFondeado( ) ;
//							int fon2 = paq2.getFondeado( ) ;
//							int fac1 = paq1.getFacturadoA( ) ;
//							int fac2 = paq2.getFacturadoA( ) ;
//							
//							// regresa la diferencia de la suma
//							return ( fon1 + fac1 ) - ( fon2 + fac2 ) ;
//						}
//					} ) ;
//			
//			System.out.println( "GenerarCampanaPreparacion: paquetesDeAssetArr/" + paquetesDeAssetArr.length ) ;
//			
//			// toma los primeros paqutes correspondientes
//			int finalIndex = ( ( paquetesAsignadosACampana[ index ] > paquetesDeAssetArr.length ) ? paquetesDeAssetArr.length : paquetesAsignadosACampana[ index ] ) ;
//			System.out.println( "GenerarCampanaPreparacion: finalindex/" + finalIndex  ) ;
//			
//			// recorre hasta finalIndex
//			for( int i = 0 ; i < finalIndex ; i++ )
//			{
//				// agrega el TblCuentaPaquete al res
//				paquetesParaCampana.add( paquetesDeAssetArr[ i ] ) ;
//			}
//
//			// aumenta el indice
//			index++ ;
//		}
		
		try
		{
			// los regresa
			MasterCardDAO.regresarPaquetesDeCuenta( f.getAsignarInt( ) , f.getPaqueteAutorizadoIdOrder( ), user ) ;
		}catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			e.printStackTrace( ) ;
			user.setMessageError( e.getMessage( ) ) ;
		}
		
                MasterCardDAO.closeEntityManager( ) ;
//		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/GenerarCampanaDesplegarFormulario.jsp" ) ;
		user.setNextWorkArea( "/ListarPaquetesAsignadosIn.do" ) ;
		
		return mapping.findForward( "success" ) ;
	}
	
}
